package servlets;

import java.io.IOException;
import java.util.Vector;
import javax.jdo.PersistenceManager;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.*;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Transaction;

import model.KategorijaPovlastice;
import model.Povlastica;
import model.Prevoznik;
import model.User;
import model.Util;
import app.PMF;

@SuppressWarnings("serial")
public class BenefitServlet extends HttpServlet {
	public void doPost(HttpServletRequest req, HttpServletResponse resp)
	throws IOException {

		resp.setContentType("text/html; charset=utf-8");

		HttpSession session = req.getSession(true);

		// za prikaz povlastice
		String showBenefit = req.getParameter("showBenefit");
		// ID koristimo i kod izmene
		String benID = req.getParameter("ID");
		// za izmenu povlastice
		String change = req.getParameter("change");
		String changed = req.getParameter("changed");
		// za brisanje povlastice
		String delete = req.getParameter("delete");
		// za kreiranje povlastice
		String naziv = req.getParameter("naziv");
		String op = req.getParameter("op");
		String vrednost = req.getParameter("vrednost");
		String katID = req.getParameter("kat");

		User user = (User) session.getAttribute("user");

		Prevoznik prevoznik = (Prevoznik) session.getAttribute("prevoznik");

		try {

			// ako korisnik nije logovan, vracamo ga na pocetnu stranicu
			if (user == null || !user.isLoggedIn()) {
				req.getRequestDispatcher("WebContent/logIn.jsp").forward(req, resp);
				return;
			}

			// ako trebamo prikazati povlasticu
			if (showBenefit != null && showBenefit.equals("true")) {

				// dodajemo za prikaz povlasticu sa benID
				Povlastica povl = Util.getEntityFromTableByID(
						Povlastica.class, benID);
				session.setAttribute("povl", povl);

				Vector<KategorijaPovlastice> benCats = Util
				.getAllEntitiesFromTable(KategorijaPovlastice.class);
				session.setAttribute("allBenCats", benCats);
				// System.out.println("\n\tKategorije povlastice, ucitane");

				// redirektovacemo na stranicu za izmenu povlastice
				RequestDispatcher disp = req
				.getRequestDispatcher("WebContent/showBenefit.jsp");
				disp.forward(req, resp);
				return;
			}
			// ako trebamo ici na izmenu,
			if (change != null && change.equals("true")) {

				// dodajemo za prikaz povlasticu sa benID
				Povlastica povl = Util.getEntityFromTableByID(
						Povlastica.class, benID);
				System.out.println("menjamo povlasticu: " + povl);
				session.setAttribute("povl", povl);

				Vector<KategorijaPovlastice> benCats = Util
				.getAllEntitiesFromTable(KategorijaPovlastice.class);
				session.setAttribute("allBenCats", benCats);
				System.out.println("\n\tKategorije povlastice, ucitane");

				// redirektovacemo na stranicu za izmenu povlastice
				RequestDispatcher disp = req
				.getRequestDispatcher("WebContent/changeBenefit.jsp");
				disp.forward(req, resp);
				return;
			}

			// ako trebamo ici na izmenu,
			if (changed != null && changed.equals("true")) {

				PersistenceManager pm = PMF.get().getPersistenceManager();

				// ucitavamo povlasticu i kategoriju povlastice
				Povlastica povl = Util.getEntityFromTableByID(
						Povlastica.class, benID);
				povl = Util.getEntityFromTableByID(Povlastica.class, povl
						.getSifra().getId() + "");

				KategorijaPovlastice katPovl = Util.getEntityFromTableByID(
						KategorijaPovlastice.class, katID);

				povl.setNaziv(naziv);
				povl.setOp(Integer.parseInt(op));
				povl.setKatPovlastice(katPovl.getSifra());
				// snimamo povlasticu
				pm.makePersistent(povl);
				System.out.println("Nova povlastica: " + povl);

				// redirektovacemo na stranicu za izmenu povlastice
				RequestDispatcher disp = req
				.getRequestDispatcher("WebContent/changeBenefit.jsp");
				disp.forward(req, resp);

				pm.close();

				return;
			}

			if (delete != null && delete.equals("true")) {

				DatastoreService ds = DatastoreServiceFactory
				.getDatastoreService();

				// ucitavamo povlasticu i kategoriju povlastice
				Povlastica povl = Util.getEntityFromTableByID(
						Povlastica.class, benID);
				povl = Util.getEntityFromTableByID(Povlastica.class, povl
						.getSifra().getId() + "");

				System.out.println("Brisemo povlasticu: " + povl + "...");
				Transaction tx = ds.beginTransaction();
				ds.delete(povl.getSifra());
				tx.commit();
				System.out.println("Povlastica obrisana!");

				// redirektovacemo na stranicu za izmenu povlastice
				RequestDispatcher disp = req
				.getRequestDispatcher("/timeTableServlet");
				disp.forward(req, resp);

				return;
			}

			// ako trebamo dodati povlasticu
			if (naziv != null && op != null && vrednost != null
					&& katID != null) {
				PersistenceManager pm = PMF.get().getPersistenceManager();

				KategorijaPovlastice katPovl = Util.getEntityFromTableByID(
						KategorijaPovlastice.class, katID);

				Povlastica ben = new Povlastica(naziv,
						Integer.parseInt(op), Double.parseDouble(vrednost),
						katPovl.getSifra(), prevoznik.getSifra());
				pm.makePersistent(ben);

				System.out.println("\n\tNova povlastica: " + ben
						+ ", snimljena");

				// redirektovacemo na stranicu sa redom voznje
				RequestDispatcher disp = req
				.getRequestDispatcher("/timeTableServlet");
				disp.forward(req, resp);

				session.removeAttribute("povl");
				pm.close();

				return;
			}

			Vector<KategorijaPovlastice> benCats = Util
			.getAllEntitiesFromTable(KategorijaPovlastice.class);
			session.setAttribute("allBenCats", benCats);
			System.out.println("\n\tKategorije povlastice, ucitane");

			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/addBenefit.jsp");
			disp.forward(req, resp);
			return;

		} catch (Exception e) {

		}
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
	throws ServletException, IOException {
		doPost(req, resp);
	}

}
